/** 数据类型：用于对不同类型的数据进行格式化 */
export enum DataType {
    /** 时间类型 */
    date = 'date',
}

/** 对齐方式 */
export enum Alignment {
    left = 'left',
    center = 'center',
    right = 'right',
}

/** 操作按钮类型 */
export enum OperationButtonType {
    /** 删除类按钮，红色 */
    delete = 'delete',
}

export const OperationsPropName = 'operations' // 操作列的名称

/** 操作按钮项配置 */
export interface OperationItem {
    /** 操作按钮显示的文本 */
    label: string
    /** 操作按钮的图标 */
    iconName: string
    /** 操作按钮点击事件处理 */
    click: Function
    /** 按钮操作类型 */
    type?: OperationButtonType | string
    /** 是否显示按钮 */
    visible?: boolean | ((scopedData: any) => boolean)
    /** 获取自动的类样式 */
    class?: string | ((scopedData: any) => string)
    /** 获取绑定到组件的属性 */
    getBindAttribute?: (scopedData: any) => any
    /** 获取绑定到组件的属性 */
    getMessage?: (scopedData: any) => string | boolean
    children?: OperationItem[]
}

// 数据列的配置
export interface TableColumn {
    // extends InstanceType<typeof ElTableColumn> {
    prop: string // 列对应的数据字段
    label: string // 列标题名称
    align?: string // 数据对齐方式
    showOverflowTooltip?: boolean // 内容是否显示气泡框，配置高于组件配置
    width?: number // 列宽度
    headerAlign?: Alignment | string // 标题头的对齐方式
    dataType?: DataType | string // 数据类型：用于对不同类型的数据进行格式化
    formatter?: Function
    buttonList?: OperationItem[] // 操作列表项配置
    // [key: string]: any
}

export interface VueProps {
    data: AnyObject[]
    columns: TableColumn[] // 显示的列
    dataId?: string // 数据的唯一标识字段
    loading?: boolean // 是否加载中
    showOverflowTooltip?: boolean // 内容是否显示气泡框，默认显示
    showIndex?: boolean // 是否显示序号列
    indexColumnWidth?: number | string // 默认的序号列宽度
    headerAlign?: Alignment | string // 标题头是否居中
    showSelection?: boolean // 是否显示复选框
    showPageInfo?: boolean | number // 是否显示分页，设置为数字则强制显示分页。
    hideBackground?: boolean // 显示背景颜色
    showTotal?: boolean // 是否总记录数
    pageAttribute?: AnyObject // 分页属性
    currentPage?: number // 当前页
    pageSize?: number // 当前页的记录数
    total?: number // 总条数，在defineProps这里声明了，属性就不会出现在$attrs中
}
